The approaches described in this section could be pursued, but are not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated herein, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
Network management applications often need to determine the current configuration on a device, and then present the configuration to a user or to another process or application. Currently, two approaches are primarily used for determining a configuration. In a first approach, one or more MIB queries are issued using Simple Network Management Protocol (SNMP). An aggregation of the responses yields the then-current configuration.
Alternatively, the network management application can obtain a complete configuration file that was previously loaded into the device and process it for presentation. The configuration file typically comprises a large number of a plurality of command-line interface commands (“CLIs”) that are compatible with the operating system of the network device. An example of an operating system that uses CLIs is the Internetworking Operating System of Cisco Systems, Inc. (San Jose, Calif.).
The MIB approach is easier from the perspective of the application. However, there are a number of issues with this approach. First, the development of new operating system commands and configuration parameters may occur at a pace that greatly exceeds the pace at which corresponding MIBs are developed. Typically, developing new MIBs requires extensive lead-time to allow for testing and verification. As a result, existing MIBs often are either incomplete or are not implemented in a timely manner with respect to an operating system release. This requires an application to use the configuration file to determine the device configuration. The same issues exist when an application needs to change the device configuration. MIBs also often do not distinguish between user-configured values and default values established by the operating system.
Working with a configuration file consisting of CLIs has its own set of issues. Operating system versions are released by network device vendors at a fast pace. Some vendors issue operating system versions in many version trains simultaneously. For example, in addition to major operating system releases, there may be Early Deployment (ED) releases, Technology (T) releases, and special releases for particular lines of business, business units, or customers. For each of these versions, there can be platform-specific commands and options. Further, each different release may have added or deleted certain commands, changed options for existing commands, or changed acceptable value ranges for command parameters. Support such a number of releases on an ongoing basis, through hard-coded program logic in a network management application, is a difficult task. For such support, application back ends and client code must be littered with hard coded references to the releases. Maintaining and enhancing such code is problematic.
Past efforts to tackle these issues have been unsuccessful for several reasons. Developing a general-purpose parser to handle all operating system commands is complicated when generic parsing libraries are used, such as the GNU parsing libraries. Developers of the parser must be intimately familiar with operating system command syntax. Complex trees of programmatic classes have been needed to process each operating system version, and handling platform-specific details for each version has required even more hard coding.
Further, creating a network management application that can “learn” the syntax of operating system commands programmatically, by connecting to the actual devices, is also difficult. The distributed nature of development of a complex operating system such as IOS also leads to complications.
Based on the foregoing, there is a clear need in this field for a mechanism to allow network management applications to support multiple operating system versions in which the command syntax and allowable parameter values are changing constantly.
There is a particular need for a mechanism that is flexible enough to operate with entirely new kinds of operating system command that support emerging services such as voice over Internet Protocol (VoIP).